home *** CD-ROM | disk | FTP | other *** search
- /* @(#)pr_impl_util.h 1.9 89/04/28 SMI */
-
- /*
- * Copyright 1987-1989 Sun Microsystems, Inc.
- */
-
- /*
- * Pixrect implementation utilities
- */
-
- #ifndef pr_impl_util_DEFINED
- #define pr_impl_util_DEFINED
-
- /* Reiser cpp concatenation macros */
- #ifndef _CAT
- #undef _IDENT
- #define _IDENT(x) x
- #define _CAT(a,b) _IDENT(a)b
- #endif
-
- /*
- * code selection macros
- */
- #define IFTRUE(a,b) a
- #define IFFALSE(a,b) b
-
- /* and together multiple options */
- #define IFAND IFAND2
- #define IFAND2(opt1,opt2,a,b) opt1(opt2(a,b),b)
- #define IFAND3(opt1,opt2,opt3,a,b) opt1(opt2(opt3(a,b),b),b)
- #define IFAND4(opt1,opt2,opt3,opt4,a,b) opt1(opt2(opt3(opt4(a,b),b),b),b)
- #define IFAND5(opt1,opt2,opt3,opt4,opt5,a,b) \
- opt1(opt2(opt3(opt4(opt5(a,b),b),b),b),b)
- #define IFAND6(opt1,opt2,opt3,opt4,opt5,opt6,a,b) \
- opt1(opt2(opt3(opt4(opt5(opt6(a,b),b),b),b),b),b)
-
- #ifdef KERNEL
- #define IFKERNEL IFTRUE
- #else
- #define IFKERNEL IFFALSE
- #endif
-
- /*
- * lint garbage
- */
- #ifdef lint
-
- #define IFLINT IFTRUE
-
- int _ZERO_; /* "constant in conditional context" workaround */
- #define _ONE_ (!_ZERO_)
- int _loop; /* "_loop redefinition hides earlier one" */
-
- #else lint
-
- #define IFLINT IFFALSE
-
- #define _ZERO_ 0
- #define _ONE_ 1
-
- #endif lint
-
- /*
- * portability aids
- */
- #ifdef mc68000
-
- #define IF68000 IFTRUE
-
- typedef caddr_t INT_T; /* pseudo-integer type (address register) */
- typedef u_long PTR_T; /* pseudo-pointer type (data register) */
- typedef short LOOP_T; /* loop variable (for dbra loops) */
-
- #define LOOP_DECR(var) (--(var) != -1)
-
- #else mc68000
-
- #define IF68000 IFFALSE
-
- typedef int INT_T;
- typedef caddr_t PTR_T;
- typedef int LOOP_T;
-
- #define LOOP_DECR(var) (--(var) >= 0)
-
- #endif mc68000
-
- #ifdef sparc
- #define IFSPARC IFTRUE
- #else
- #define IFSPARC IFFALSE
- #endif
-
- /* true if we can make 32 bit accesses on 16 bit boundaries */
- #ifndef SHORT_ALIGN
- #define SHORT_ALIGN (!defined(sparc))
- #endif
-
- #if SHORT_ALIGN
- #define IFSHORT_ALIGN IFTRUE
- #else
- #define IFSHORT_ALIGN IFFALSE
- #endif
-
-
- #ifndef LITTLE_ENDIAN
- #define LITTLE_ENDIAN defined(i386)
- #endif
-
- #if LITTLE_ENDIAN
- #define ENDIAN IFTRUE
- #else
- #define ENDIAN IFFALSE
- #endif
-
- /*
- * SunOS release number
- * warning: these tests are fragile
- */
- #if defined(sun) && !defined(SUNOS)
- #ifdef _sys_types_h
- #define SUNOS 41
- #else _sys_types_h
- #ifdef NFDBITS
- #define SUNOS 40
- #else NFDBITS
- #define SUNOS 35
- #endif NFDBITS
- #endif _sys_types_h
- #endif
-
- #if SUNOS >= 40
- #define IFSUNOS4 IFTRUE
- #else
- #define IFSUNOS4 IFFALSE
- #endif
-
- #if SUNOS >= 41
- #define IFSUNOS41 IFTRUE
- #else
- #define IFSUNOS41 IFFALSE
- #endif
-
-
- /*
- * misc. macros
- */
-
- /* statement macro */
- #define _STMT(op) do { op } while (_ZERO_)
-
- /* loop macros */
- #define PR_LOOPVP(var, op) do { op; } while (LOOP_DECR(var))
- #define PR_LOOPV(var, op) _STMT(while (LOOP_DECR(var)) { op; })
- #define PR_LOOPP(count, op) _STMT( \
- IFLINT(, register LOOP_T) _loop = (count); PR_LOOPVP(_loop, op);)
- #define PR_LOOP(count, op) _STMT( \
- IFLINT(, register LOOP_T) _loop = (count); PR_LOOPV(_loop, op);)
-
- /* pointer manipulation */
- #define PTR_ADD(p, incr) ((caddr_t) (p) + (incr))
- #define PTR_INCR(type, p, incr) (p = (type) ((caddr_t) (p) + (incr)))
-
- /* unshifted pixrect op codes */
- #define PIX_OPSRC (12)
- #define PIX_OPDST (10)
- #define PIX_OPNOT(op) ((op) ^ 15)
- #define PIX_OPCLR (0)
- #define PIX_OPSET (15)
-
- /* extract color and op code fields */
- #define PIXOP_COLOR(op) ((op) >> 5)
- #define PIXOP_OP(op) ((op) >> 1 & 15)
-
- /* reverse video src or dst */
- #define PIX_OP_REVERSESRC(op) (((op) & 3) << 2 | (op) >> 2 & 3)
- #define PIX_OP_REVERSEDST(op) ((~(op) & 5) << 1 | ~(op) >> 1 & 0x5)
-
- /* determine if op needs src or dst */
- #define PIX_OP_NEEDS_SRC(op) (((op) >> 2 ^ (op)) & 3)
- #define PIX_OP_NEEDS_DST(op) (((op) >> 1 ^ (op)) & 5)
-
- /* misc. data types */
- typedef short MPR_T; /* type used for memory pixrect data */
- typedef u_short UMPR_T; /* unsigned equivalent of MPR_T */
-
- #endif pr_impl_util_DEFINED
-